/******************************************************************************
 *
 * @file       registerdialog.h
 * @brief      注册窗口
 *
 * @author     ario
 * @date       2024/05/13
 * @history
 *****************************************************************************/

#ifndef REGISTERDIALOG_H
#define REGISTERDIALOG_H


#include <QDialog>
#include "global.h"

namespace Ui {
class RegisterDialog;
}

class RegisterDialog : public QDialog
{
    Q_OBJECT

public:
    explicit RegisterDialog(QWidget *parent = nullptr);
    ~RegisterDialog();

private:
    void showTip(QString str, bool b_ok);       // 显示错误提示
    void initHttpHandlers();                    // 初始化Http发送请求的回调函数
    void AddTipErr(TipErr te, QString tips);    // 缓存出现的错误
    void DelTipErr(TipErr te);                  // 删除出现的错误
    void ChangeTipPage();                       // 切换到注册成功界面

signals:
    void sigSwitchLogin();                      // 切换到登录界面的信号

private slots:
    void slot_reg_mod_finish(ReqId req_id, QString res, ErrorCodes err);        // 接收到注册模块http回复的槽函数

    bool checkUserValid();                      // 检查用户名是否为空
    bool checkEmailValid();                     // 检查邮箱是否合规
    bool checkPassValid();                      // 检查密码位数和是否包含非法字符
    bool checkConfirmValid();                   // 检查确认密码是否和密码相同
    bool checkVerifyValid();                    // 检查验证码是否为空

    void on_get_code_clicked();                 // 获取验证码
    void on_sure_btn_clicked();                 // 发送注册请求

    void on_return_btn_clicked();               // 注册成功，从注册成功界面返回到登录界面
    void on_cancel_btn_clicked();               // 取消注册，从注册界面返回到登录界面

private:
    Ui::RegisterDialog *ui;
    QMap<ReqId, std::function<void(const QJsonObject &)>> _handlers;    // 保存Http请求与回调函数的map
    QMap<TipErr, QString> _tip_errs;                                    // 缓存错误码与错误提示的map
    QTimer* _countdown_timer;                                           // 跳转到注册成功界面使用的定时器
    int _countdown;                                                     // 从注册成功界面跳转到登录界面的计数器，初始为10，与定时器配合使用
};

#endif // REGISTERDIALOG_H
